本文为您介绍Raw格式的使用方法、配置选项和类型映射。
背景信息
Raw格式允许读写基于字节的原始值作为单个列。Raw格式连接器是内置的。支持Raw格式的连接器包括消息队列Kafka、Upsert Kafka和对象存储OSS。
使用方法
例如,在Kafka中具有以下原始格式的日志数据,并希望使用Flink SQL读取和分析此类数据。
47.xx.xx.179 - - [28/Feb/2019:13:17:10 +0000] "GET /?p=1 HTTP/2.0" 200 5316 "https://domain.com/?p=1" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.xx.xx.119 Safari/537.36" "2.75"
使用Raw格式以UTF-8编码的形式从中读取Kafka topic作为匿名字符串值的示例如下:
CREATE TABLE nginx_log (
log STRING
) WITH (
'connector' = 'kafka',
'topic' = 'nginx_log',
'properties.bootstrap.servers' = 'localhost:9092',
'properties.group.id' = 'testGroup',
'format' = 'raw'
);
通过上述语句将原始数据读取为纯字符串后,可以使用自定义函数将字符串拆分为多个字符串并进行进一步分析,例如以下SQL语句当中的my_split函数。
SELECT t.hostname, t.datetime, t.url, t.browser, ...
FROM(
SELECT my_split(log) as t FROM nginx_log
);
同样地,可以将一个STRING类型的列以UTF-8编码的匿名字符串值写入Kafka topic。
配置选项
选项 | 是否必选 | 默认值 | 类型 | 说明 |
format | 是 | (none) | String | 声明使用的格式。使用Raw格式时,参数取值为raw。 |
raw.charset | 否 | UTF-8 | String | 指定文本字符串的编码字符集。默认值为UTF-8。 |
raw.endianness | 否 | big-endian | String | 指定数字值的字节的编码字节序。参数取值如下:
|
类型映射
Raw格式支持的Flink SQL类型如下。
Flink SQL类型 | 值 |
CHAR / VARCHAR / STRING | UTF-8(默认)编码的文本字符串。 说明 编码字符集可以通过raw.charset进行配置。 |
BINARY / VARBINARY / BYTES | 字节序列。 |
BOOLEAN | 布尔值的单个字节。 |
TINYINT | 有符号数值的单个字节。 |
SMALLINT | 采用big-endian(默认)编码的两个字节。 说明 字节序可以通过raw.endianness配置。 |
INT | 采用big-endian(默认)编码的四个字节。 说明 字节序可以通过raw.endianness配置。 |
BIGINT | 采用big-endian(默认)编码的八个字节。 说明 字节序可以通过raw.endianness配置。 |
FLOAT | 采用IEEE 754格式和big-endian(默认)编码的四个字节。 说明 字节序可以通过raw.endianness配置。 |
DOUBLE | 采用IEEE 754格式和big-endian(默认)编码的八个字节。 说明 字节序可以通过raw.endianness配置。 |
RAW | 通过RAW类型的底层TypeSerializer进行序列化的字节序列。 |
其他使用说明
Raw格式将NULL值编码成byte[]类型的NULL,Upsert-Kafka会将NULL值视为墓碑消息,在键上删除该值。因此,如果该字段具有NULL值,建议避免使用Upsert-Kafka连接器和Raw格式作为value.format。